/*
 * Copyright (c) 2018-2999 北京小象智慧信息科技有限公司 All rights reserved.
 *
 * https://www.xiaoxiangai.com/
 *
 * 未经允许，不可做商业用途！
 *
 * 版权所有，侵权必究！
 */

package com.yami.shop.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yami.shop.bean.app.dto.ProductDto;
import com.yami.shop.bean.app.dto.TagProductDto;
import com.yami.shop.bean.dto.SearchProdDto;
import com.yami.shop.bean.model.Product;
import com.yami.shop.bean.param.ProductParam;
import com.yami.shop.common.util.PageParam;

import java.util.List;

/**
 * 商品
 */
public interface ProductService extends IService<Product> {

    /**
     * 保存商品
     *
     * @param product 商品信息
     */
    void saveProduct(ProductParam productParam,Long shopId);

    /**
     * 收银app保存商品
     * */
    Product insertProduct(ProductParam productParam,Long shopId);

    /**
     * 更新商品
     *
     * @param product 商品信息
     */
    void updateProduct(ProductParam productParam,Product dbProduct, Long shopId);

    /**
     * 根据商品id获取商品信息
     *
     * @param prodId
     * @return
     */
    Product getProductByProdId(Long prodId);


    void removeProductByProdId(Long prodId);

    void removeProductCacheByProdId(Long prodId);

    IPage<ProductDto> pageByPutawayTime(IPage<ProductDto> page);

    IPage<ProductDto> pageByNewProd(IPage<ProductDto> page,Long shopId);

    IPage<ProductDto> pageByTagId(Page<ProductDto> page, Long tagId);

    IPage<ProductDto> moreBuyProdList(Page<ProductDto> page);

    IPage<ProductDto> moreByNewProd(Page<ProductDto> page,Long shopId);

    IPage<ProductDto> pageByCategoryId(Page<ProductDto> page, Long categoryId,Long shopId);

    List<Product> getCouponShop(Long shopId);

    List<Product> listProdByCategoryId(Long categoryId);

    IPage<SearchProdDto> getSearchProdDtoPageByProdName(Page page, String prodName, Integer sort, Integer orderBy,Long shopId);

    List<TagProductDto> tagProdList();

    IPage<ProductDto> collectionProds(PageParam page, String userId);

    List<Product> getAllProduct(Long shopId);

    /**
     * 根据shop_id查询所属店铺商品
     */
    List<Product> getProductByShopId(Long shopId);

    /**
     * 根据shop_id 查询所有商品
     * @param shopId
     * @return
     */
    List<Product> selectProductByShopId(Long shopId);

    /**
     * 查询所有可推广产品
     */
    List<Product> getAllSpread(Long shopId);

    /**
     * 获取产品佣金
     */
    String getRebateMoney(String prodId);

    /**
     * 根据shopId删除产品信息
     * @param shopId
     */
    void deleteProductByShopId(Long shopId);

    /**
     * 查询未参加活动的商品
     */
    List<Product> getActivityPro(Long shopId);

    /**
     * 获取活动商品列表
     */
    IPage<ProductDto> pageByActivity(Page<ProductDto> page,Long shopId);

    /**
     * 查询当前店铺有没有该商品
     */
    Product getProdByProdName(String prodName,Long shopId);

    /**
     * 查询该商品是不是在活动期间内的
     */
    Product getActivityProd(Long prodId);

    /**
     * 查询当月产品销售数量
     */
    int getSalesNumber(Long prodId);

    /**
     * 查询线上销售的所有商品
     */
    //List<Product> getProductByCategoryId(Long shopId,Long categoryId);

    /**
     * 根据查询条件搜索商品
     */
    List<Product> getProductListBySearchField(Long shopId,String searchField);

    List<Product> getProductList(Product product);

    /**
     * 根据barCode码查询对应的商品
     */
    Product getProductByBarCode(Product product);

    /**
     * 查询对应分类下的商品
     */
    IPage<Product> getProductByCayegoryId(Page<Product> page,Long shopId,Long categoryId);

}
